package com.appleyk;


/**
 * <p>抽象一个可执行的任务类，主要就是把任务执行的方法进行抽取封装（其中用到了模板方法）</p>
 * @blob https://blog.csdn.net/appleyk
 * @github https://github.com/kobeyk
 * @date created on 10:44 2021/2/21
 * @author appleyk
 * @version v0.1.2
 * @created 01-7月-2023 15:38:43
 */
public abstract class AJobExecutable {

	/**
	 * 任务对象
	 */
	private final TJob job;

	/**
	 * 
	 * @param job
	 */
	public AJobExecutable(TJob job){
		this.job = job;
	}

	/**
	 * 这个方法后面留给单独的任务执行线程来调用
	 * 
	 * @param listener
	 */
	public void execute(IJobListener listener){
		try{
			doExecute(job,listener);
		}catch (Exception e){
			listener.onFail(job,e);
		}
	}

	/**
	 * 这个方法留给具体的执行任务来实现（必须实现）
	 * 
	 * @param job
	 * @param listener
	 * @exception Exception
	 */
	public abstract void doExecute(TJob job, IJobListener listener)
	  throws Exception;
}//end AJobExecutable